package com.example.springcloud.springcloudfeign.feign;

import com.example.springcloud.springcloudfeign.User;
import com.example.springcloud.springcloudfeign.fallback.FeignFallBack;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * Feign服务接口，也就是调用远程的hello-service服务的请求
 *
 *      1.如何使用这个FeignService接口?
 *      2.如何请求降级？
 *
 * weiximei on 2018/6/10
 */
// 客户端服务请求映射，映射的值时注册中心的hello-service的服务
// 替换之前用到的RestTmelate
// 第一个参数：请求的远端的连接。第二个参数：请求服务降级的类
@FeignClient(value = "hello-service",fallback = FeignFallBack.class)
public interface FeignService {


    /**
     * 请求hello-service服务中的，hello请求
     * @return
     */
    @RequestMapping("/hello")
    String hello();

    /**
     * 如何使用这个FeignService接口?
     */


    /**
     * 上面是调用的比较简单的远程请求，
     * 下面是调用带有参数的比较复杂的远程请求
     */

    /**
     * 这里的方法类型都是和远程服务类型对应的
     *
     */

    /**
     * 请求带参数
     * @param name
     * @return
     */
    @RequestMapping(value = "/hello1",method = RequestMethod.GET)
    String hello(@RequestParam("name") String name);

    /**
     * 接受多个请求头参数
     * @param name
     * @param age
     * @return
     */
    @RequestMapping(value = "/hello2",method = RequestMethod.POST)
    User hello(@RequestHeader("name") String name, @RequestHeader("age") Integer age);


    /**
     * 接受请求的json格式数据
     * @param user
     * @return
     */
    @RequestMapping(value = "/hello3",method = RequestMethod.POST)
    String hello(@RequestBody User user);

}
